<?php
/**
 * 缓存破坏器 - 用于处理静态资源的版本控制
 * 当文件被修改时，自动更新版本号
 */

// 设置内容类型
header('Content-Type: application/javascript');

// 获取请求的文件路径
$request_uri = $_SERVER['REQUEST_URI'];
$file_path = parse_url($request_uri, PHP_URL_PATH);

// 移除查询参数
$file_path = strtok($file_path, '?');

// 构建实际文件路径
$actual_file = __DIR__ . $file_path;

// 检查文件是否存在
if (!file_exists($actual_file)) {
    http_response_code(404);
    echo "// File not found: " . $file_path;
    exit;
}

// 获取文件扩展名
$extension = pathinfo($actual_file, PATHINFO_EXTENSION);

// 设置适当的Content-Type
switch ($extension) {
    case 'css':
        header('Content-Type: text/css');
        break;
    case 'js':
        header('Content-Type: application/javascript');
        break;
    case 'png':
        header('Content-Type: image/png');
        break;
    case 'jpg':
    case 'jpeg':
        header('Content-Type: image/jpeg');
        break;
    case 'gif':
        header('Content-Type: image/gif');
        break;
    case 'svg':
        header('Content-Type: image/svg+xml');
        break;
    case 'ico':
        header('Content-Type: image/x-icon');
        break;
}

// 设置缓存控制头
if (in_array($extension, ['css', 'js'])) {
    // CSS和JS文件设置短期缓存
    header('Cache-Control: public, max-age=3600, must-revalidate');
} elseif (in_array($extension, ['png', 'jpg', 'jpeg', 'gif', 'ico', 'svg'])) {
    // 图片文件设置长期缓存
    header('Cache-Control: public, max-age=86400');
} else {
    // 其他文件不缓存
    header('Cache-Control: no-cache, no-store, must-revalidate');
}

// 设置ETag
$etag = md5_file($actual_file);
header('ETag: "' . $etag . '"');

// 检查If-None-Match头（客户端缓存验证）
if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && $_SERVER['HTTP_IF_NONE_MATCH'] === '"' . $etag . '"') {
    http_response_code(304);
    exit;
}

// 设置Last-Modified头
$last_modified = gmdate('D, d M Y H:i:s', filemtime($actual_file)) . ' GMT';
header('Last-Modified: ' . $last_modified);

// 检查If-Modified-Since头
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= filemtime($actual_file)) {
    http_response_code(304);
    exit;
}

// 输出文件内容
readfile($actual_file);
?>
